#pragma once

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Negative response (NRC) codes
 * 
 */
typedef enum {
    UDS_NRC_PR = 0x00,
    UDS_NRC_POSITIVE_RESPONSE = UDS_NRC_PR,

    UDS_NRC_GR = 0x10,
    UDS_NRC_GENERAL_REJECT = UDS_NRC_GR,

    UDS_NRC_SNS = 0x11,
    UDS_NRC_SERVICE_NOT_SUPPORTED = UDS_NRC_SNS,

    UDS_NRC_SFNF = 0x12,
    UDS_NRC_SUBFUNCTION_NOT_SUPPORTED = UDS_NRC_SFNF,

    UDS_NRC_IMLOIF = 0x13,
    UDS_NRC_INCORRECT_MESSAGE_LENGTH_OR_INVALID_FORMAT = UDS_NRC_IMLOIF,

    UDS_NRC_RTL = 0x14,
    UDS_NRC_RESPONSE_TOO_LONG = UDS_NRC_RTL,

    /* 0x15 - 0x20 (ISOSAERESRVD) */

    UDS_NRC_BRR = 0x21,
    UDS_NRC_BUSY_REPEAT_REQUEST = UDS_NRC_BRR,

    UDS_CNC = 0x22,
    UDS_NRC_CONDITIONS_NOT_CORRECT = UDS_CNC,

    /* 0x23 (ISOSAERESRVD) */

    UDS_NRC_RSE = 0x24,
    UDS_NRC_REQUEST_SEQUENCE_ERROR = UDS_NRC_RSE,

    UDS_NRC_NRFSC = 0x25,
    UDS_NRC_NO_RESPONSE_FROM_SUBNET_COMPONENT = UDS_NRC_NRFSC,

    UDS_NRC_FPEORA = 0x26,
    UDS_NRC_FAILURE_PREVENTS_EXECUTION_OF_REQUESTED_ACTION = UDS_NRC_FPEORA,
    
    /* 0x27 - 0x30 (ISOSAERESRVD) */

    UDS_NRC_ROOR = 0x31,
    UDS_NRC_REQUEST_OUT_OF_RANGE = UDS_NRC_ROOR,
    
    /* 0x32 (ISOSAERESRVD) */

    UDS_NRC_SAD = 0x33,
    UDS_NRC_SECURITY_ACCESS_DENIED = UDS_NRC_SAD,

    /* 0x34 (ISOSAERESRVD) */

    UDS_NRC_IK = 0x35,
    UDS_NRC_INVALID_KEY = UDS_NRC_IK,

    UDS_NRC_ENOA = 0x36,
    UDS_NRC_EXCEED_NUMBER_OF_ATTEMPTS = UDS_NRC_ENOA,

    UDS_NRC_RTDNE = 0x37,
    UDS_NRC_REQUIRED_TIME_DELAY_NOT_EXPIRED = UDS_NRC_RTDNE,

    /* 0x38 - 0x4F (RBEDLSD) Reserved By Extended Data Link Security Document */
    //UDS_NRC_SECURE_DATA_TRANSMISSION_REQUIRED = 0x38,
    //UDS_NRC_SECURE_DATA_TRANSMISSION_NOT_ALLOWED = 0x39,
    //UDS_NRC_SECURE_DATA_TRANSMISSION_FAILED = 0x3A,
    
    /* 0x50 - 0x6F (ISOSAERESRVD) */
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_TIME_PERIOD = 0x50,
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_SIGNATURE = 0x51,
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_CHAIN_OF_TRUST = 0x52,
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_TYPE = 0x53,
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_FORMAT = 0x54,
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_CONTENT = 0x55,
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_SCOPE = 0x56,
    //UDS_NRC_CERT_VALIDATION_FAILED_INVALID_CERTIFICATE = 0x57,
    //UDS_NRC_OWNERSHIP_VERIFICATION_FAILED = 0x58,
    //UDS_NRC_CHALLENGE_CALCULATION_FAILED = 0x59,
    //UDS_NRC_SETTING_ACCESS_RIGHT_FAILED = 0x5A,
    //UDS_NRC_SESSION_KEY_CREATION_FAILED = 0x5B,
    //UDS_NRC_CONFIGURATION_DATA_USAGE_FAILED = 0x5C,
    //UDS_NRC_DEAUTHENTICATION_FAILED = 0x5D,

    UDS_NRC_UDNA = 0x70,
    UDS_NRC_UPLOAD_DOWNLOAD_NOT_ACCEPTED = UDS_NRC_UDNA,

    UDS_NRC_TDS = 0x71,
    UDS_NRC_TRANSFER_DATA_SUSPENDED = UDS_NRC_TDS,

    UDS_NRC_GPF = 0x72,
    UDS_NRC_GENERAL_PROGRAMMING_FAILURE = UDS_NRC_GPF,

    UDS_NRC_WBSC = 0x73,
    UDS_NRC_WRONG_BLOCK_SEQUENCE_NUMBER = UDS_NRC_WBSC,

    /* 0x74 – 0x77 (ISOSAERESRVD) */

    UDS_NRC_RCRRP = 0x78,
    UDS_NRC_REQUEST_CORRECTLY_RECEIVED_RESPONSE_PENDING = UDS_NRC_RCRRP,
    
    /* 0x79 – 0x7D (ISOSAERESRVD) */

    UDS_NRC_SFNSIAS = 0x7E,
    UDS_NRC_SUBFUNCTION_NOT_SUPPORTED_IN_ACTIVE_SESSION = UDS_NRC_SFNSIAS,

    UDS_NRC_SNSIAS = 0x7F,
    UDS_NRC_SERVICE_NOT_SUPPORTED_IN_ACTIVE_SESSION = UDS_NRC_SNSIAS,

    /* 0x80 (ISOSAERESRVD) */

    UDS_NRC_RPMTH = 0x81,
    UDS_NRC_RPM_TOO_HIGH = UDS_NRC_RPMTH,

    UDS_NRC_RPMTL = 0x82,
    UDS_NRC_RPM_TOO_LOW = UDS_NRC_RPMTL,

    UDS_NRC_EIR = 0x83,
    UDS_NRC_ENGINE_IS_RUNNING = UDS_NRC_EIR,

    UDS_NRC_EINR = 0x84,
    UDS_NRC_ENGINE_IS_NOT_RUNNING = UDS_NRC_EINR,

    UDS_NRC_ERTTL = 0x85,
    UDS_NRC_ENGINE_RUN_TIME_TOO_LOW = UDS_NRC_ERTTL,

    UDS_NRC_TEMPTH = 0x86,
    UDS_NRC_TEMPERATURE_TOO_HIGH = UDS_NRC_TEMPTH,

    UDS_NRC_TEMPTL = 0x87,
    UDS_NRC_TEMPERATURE_TOO_LOW = UDS_NRC_TEMPTL,

    UDS_NRC_VSTH = 0x88,
    UDS_NRC_VEHICLE_SPEED_TOO_HIGH = UDS_NRC_VSTH,

    UDS_NRC_VSTL = 0x89,
    UDS_NRC_VEHICLE_SPEED_TOO_LOW = UDS_NRC_VSTL,

    UDS_NRC_TPTH = 0x8A,
    UDS_NRC_THROTTLE_PEDAL_TOO_HIGH = UDS_NRC_TPTH,

    UDS_NRC_TPTL = 0x8B,
    UDS_NRC_THROTTLE_PEDAL_TOO_LOW = UDS_NRC_TPTL,

    UDS_NRC_TRNIN = 0x8C,
    UDS_NRC_TRANSMISSION_RANGE_NOT_IN_NEUTRAL = UDS_NRC_TRNIN,

    UDS_NRC_TRNIG = 0x8D,
    UDS_NRC_TRANSMISSION_RANGE_NOT_IN_GEAR = UDS_NRC_TRNIG,
    
    /* 0x8E (ISOSAERESRVD) */

    UDS_NRC_BSNC = 0x8F,
    UDS_NRC_BRAKE_SWITCH_NOT_CLOSED = UDS_NRC_BSNC,

    UDS_NRC_SLNIP = 0x90,
    UDS_NRC_SHIFTER_LEVER_NOT_IN_PARK = UDS_NRC_SLNIP,

    UDS_NRC_TCCL = 0x91,
    UDS_NRC_TORQUE_CONVERTER_CLUTCH_LOCKED = UDS_NRC_TCCL,

    UDS_NRC_VTH = 0x92,
    UDS_NRC_VOLTAGE_TOO_HIGH = UDS_NRC_VTH,

    UDS_NRC_VTL = 0x93,
    UDS_NRC_VOLTAGE_TOO_LOW = UDS_NRC_VTL,

    /* 0x94 - 0xEF (RFSCNC) Reserved for Specific Conditions not Correct */

    /* 0xF0 - 0xFE (VMSCNC) Vehicle Manufacturer Specific Conditions Not Correct */

    /* 0xFF (ISOSAEReserved) */
} UDS_NRC_t;

#ifdef __cplusplus
}
#endif